package org.papervision3d.events
{
	import flash.events.Event;

	/**
	* <span lang="ja">対象の 3D オブジェクトが外部ファイルを読み込んだ場合に FileLoadEvent オブジェクトが送出されます。</span>
	* <span lang="en">The FileLoadEvent class represents events that are dispatched when files are loaded.</span>
	*/
	public class FileLoadEvent extends Event
	{
		/**
		 * 外部ファイルの読み込みが完了した場合の type プロパティ値を定義します。
		 */
		public static const LOAD_COMPLETE 				:String = "loadComplete";
		
		/**
		 * 外部ファイルの読み込みが失敗した場合の type プロパティ値を定義します。
		 */
		public static const LOAD_ERROR    				:String = "loadError";
		
		/**
		 * 外部ファイルの読み込みがセキュリティー上の原因で失敗した場合の type プロパティ値を定義します。
		 */
		public static const SECURITY_LOAD_ERROR			:String = "securityLoadError";
		
		/**
		 * 外部の Collada ファイルの読み込みが完了した場合の type プロパティ値を定義します。
		 */
		public static const COLLADA_MATERIALS_DONE		:String = "colladaMaterialsDone";
		
		/**
		 * 外部ファイルの読み込みが進行している場合の type プロパティ値を定義します。
		 */
		public static const LOAD_PROGRESS 				:String = "loadProgress";
		
		/**
		 * Collada オブジェクトのアニメーションが完了した場合の type プロパティ値を定義します。
		 */
		public static const ANIMATIONS_COMPLETE			:String = "animationsComplete";
		
		/**
		 * Collada オブジェクトのアニメーションが進行している場合の type プロパティ値を定義します。
		 */
		public static const ANIMATIONS_PROGRESS			:String = "animationsProgress";
			
		public var file:String = "";
		public var bytesLoaded:Number = -1;
		public var bytesTotal:Number = -1;	
		public var message:String = "";	
		public var dataObj:Object = null;

		/**
		 * <span lang="ja">新しい FileLoadEvent インスタンスを作成します。</span>
		 * @param	type			FileLoadEvent.type としてアクセス可能なイベントタイプです。
		 * @param	file
		 * @param	bytesLoaded
		 * @param	bytesTotal
		 * @param	message
		 * @param	dataObj
		 * @param	bubbles			FileLoadEvent インスタンスがイベントフローのバブリング段階で処理されるかどうかを判断します。デフォルト値は false です。
		 * @param	cancelable		FileLoadEvent インスタンスがキャンセル可能かどうかを判断します。デフォルト値は false です。
		 */
		public function FileLoadEvent( type:String, file:String="", bytesLoaded:Number=-1, bytesTotal:Number=-1, message:String="", dataObj:Object = null, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super( type, bubbles, cancelable );
			this.file = file;
			this.bytesLoaded = bytesLoaded;
			this.bytesTotal = bytesTotal;
			this.message = message;
			this.dataObj = dataObj;
		} 
		
		/**
		 * <span lang="ja">FileLoadEvent インスタンスのコピーを作成して、各プロパティの値を元のプロパティの値と一致するように設定します。</span>
		 * 
		 * @return
		 * <span lang="ja">元のオブジェクトと同じプロパティ値を含む新しい FileLoadEvent インスタンスです。</span>
		 */
		public override function clone():Event
		{
			return new FileLoadEvent(type, file, bytesLoaded, bytesTotal, message, dataObj, bubbles, cancelable);
		}
	}
}